package com.wish.building.config;


import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * @ClassName MyBatisPlusAuto
 * @Description TODO
 * @Author 18516
 * @DATE 2022/2/22 10:40:43
 * @Version 1.0
 */
public class MyBatisPlusAuto {

    public static void main(String[] args) {
        //如果在空项目下创建模块项目，我需要制定模块的名称,否则设置为空
        String moduleName = "pdd-dev/client-goods";
        String projectPath = System.getProperty("user.dir");
        String databaseName = "six-month-moni";
        FastAutoGenerator.create(
                "jdbc:mysql://localhost:3306/" + databaseName + "?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai",
                "root", "root")
                // 全局配置
                .globalConfig(
                        (scanner, builder) ->
                                builder
                                        .outputDir(projectPath + "/" + moduleName + "/src/main/java")
                                        .author(scanner.apply("请输入作者名称？")).fileOverride()
//                                        .enableSwagger()    //  开启 swagger 模式
                )
                // 包配置
                .packageConfig((scanner, builder) -> builder
                        .parent("com.yangziqiang")  //  父包名
                        .moduleName(scanner.apply("请输入包名？"))  //  父包模块名
                        .pathInfo(Collections.singletonMap(
                                OutputFile.mapperXml,
                                projectPath + "/" + moduleName
                                        + "/src/main/resources/mappers/"))
                )
                // 策略配置
                .strategyConfig((scanner, builder) -> builder
                        .addInclude(getTables(scanner.apply("请输入表名，多个英文逗号分隔？ ps:所有输入 all")))
                        .addTablePrefix("moni_") //  过滤表前缀
                        //  生成@RestController控制器
                        .controllerBuilder()
                        .enableRestStyle()
                        .enableHyphenStyle()  //  开启Controller驼峰转连字符
                        .entityBuilder()
                        .enableLombok() //  实体是否为lombok模型
                        .naming(NamingStrategy.underline_to_camel)  //  数据库表字段映射到实体类的命名策略
                        .columnNaming(NamingStrategy.underline_to_camel)  //  数据库表字段映射到实体类字段的命名策略
                        .addTableFills(
                                new Column("create_time", FieldFill.INSERT)
                        )
                        .build())
                //  模板引擎配置，默认 Velocity 可选模板引擎 Beetl 或 Freemarker
//                .templateEngine(new BeetlTemplateEngine())
                .templateEngine(new FreemarkerTemplateEngine())
                .execute();
    }

    // 处理 all 情况
    protected static List<String> getTables(String tables) {
        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
    }
}
